import {Injectable} from '@angular/core';
import {HttpClient, HttpHeaders} from '@angular/common/http';
import {environment} from '../../../environments/environment';

@Injectable({
  providedIn: 'root'
})
export class PpypService {
  baseUrl = environment.VALUE_KEY_URL_PPYP;
  // @ts-ignore
  // base = environment.production ? PPYP_BASE : '';
  serviceUrls: any = {
    dictUrl: '/dict/detail', // 字典查询
    uploadFileUrl: '/common/upload/file', // 上传

    categoryList: '/goodsType/list', // 分类列表
    categoryAdd: '/goodsType/save', // 添加分类
    categoryModify: '/goodsType/update', // 修改分类
    categoryMove: '/goodsType/up/', // 分类上下移

    categoryCommodity: '/pGoods/list', // 分类 商品列表
    categoryCommodityType: '/pGoodsType/list', // 分类 分类
    categoryCommodityBrandList: '/pGoodsType/brandList', // 分类 类型
    categoryCommodityAdd: '/goods/saveOrCancel', // 分类 商品添加

    commodityArea: '/goods/list', // 商品管理展示区域1、2
    commodityMove: '/goods/up/', // 商品管理上下移
    commodityUsedList: '/gGoods/list', // 二手商品查询
    commodityAreaAdd: '/goods/save', // 商品管理展示区域添加
    commodityAreaDelete: '/goods/delete', // 商品管理展示区域删除
    commodityUpdate: '/goods/update', // 商品管理展示区域修改

    orderList: '/order/list', // 订单列表
    orderDetail: '/order/details', // 订单详情

    brandList: '/gGoods/brandList', // 二手品牌列表
    modelList: '/gGoods/modelList', // 二手机型列表

    userList: '/customer/list', // 用户列表
    track: '/follower/save', // 跟进新增
    trackList: '/follower/list', // 跟进列表
    exportGoodsUrl: '/order/getOrderExcel', // 订单导出
  };

  constructor(public httpClient: HttpClient) {
  }

  // 文件上传
  fileUpload(file: any) {
    return this.post(this.serviceUrls.uploadFileUrl, file).toPromise();
  }

  // 跟进
  track(body: any) {
    return this.post(this.serviceUrls.track, body).toPromise();
  }

  // 跟进列表
  getTrackList(body: any) {
    return this.post(this.serviceUrls.trackList, body).toPromise();
  }

  // 查询分类列表
  getCategoryList(body: any) {
    return this.post(this.serviceUrls.categoryList, body).toPromise();
  }

  // 添加和修改分类
  categoryAddAndModify(body: any) {
    return this.post(body.id ? this.serviceUrls.categoryModify : this.serviceUrls.categoryAdd, body).toPromise();
  }

  // 分类移动
  /**
   * @param id  分类id
   * @param type 0下移 1上移
   */
  categoryMove(id: any, type: 0 | 1) {
    return this.get(this.serviceUrls.categoryMove + '?id=' + id + '&type=' + type, {}).toPromise();
  }

  // 查询分类商品列表
  getCategoryCommodity(body: any) {
    return this.post(this.serviceUrls.categoryCommodity, body).toPromise();
  }

  // 分类商品添加
  categoryCommodityAdd(body: any) {
    return this.post(this.serviceUrls.categoryCommodityAdd, body).toPromise();
  }

  // 分类类型
  categoryCommodityType() {
    return this.post(this.serviceUrls.categoryCommodityType, {page: 1, pageSize: 9999}).toPromise();
  }

  // 分类品牌
  categoryCommodityBrandList() {
    return this.post(this.serviceUrls.categoryCommodityBrandList, {page: 1, pageSize: 9999}).toPromise();
  }

  // 商品展示区域
  commodityArea(body: any) {
    return this.post(this.serviceUrls.commodityArea, body).toPromise();
  }

  // 商品展示区域移动
  commodityMove(id: any, type: any, showTypes: any) {
    return this.get(this.serviceUrls.commodityMove, {id, type, showTypes}).toPromise();
  }

  /**
   * id  number  商品来源：0-普通商品、1-二手商品
   * source  number  商品来源：0-普通商品、1-二手商品
   * img  string  商品主图
   * showTypes  number  推荐位置，1-位置1、2-位置2
   */
  // 商品展示区域添加
  commodityAreaAdd(body: any) {
    return this.post(this.serviceUrls.commodityAreaAdd, body).toPromise();
  }

  // 查询二手商品列表
  commodityAreaDelete(id: any, showTypes: 1 | 2) {
    return this.post(this.serviceUrls.commodityAreaDelete, {id, showTypes}).toPromise();
  }

  // 查询二手品牌列表
  getUsedBrandList() {
    return this.post(this.serviceUrls.brandList, {page: 1, pageSize: 9999}).toPromise();
  }

  // 查询二手机型列表
  getUsedModelList(brandId: string) {
    return this.post(this.serviceUrls.modelList, {brandId, page: 1, pageSize: 9999}).toPromise();
  }

  /**
   * 获取二手商品列表
   * page
   * pageSize
   * equipmentCode
   * typeIds  品牌多个逗号隔开
   * modelIds  型号多个逗号隔开
   * showTypes  推荐位置，1-位置1、2-位置2，多个用逗号分隔
   */
  commodityUsedList(body: any) {
    return this.post(this.serviceUrls.commodityUsedList, body).toPromise();
  }

  // 商品展示区域修改
  commodityUpdate(body: any) {
    return this.post(this.serviceUrls.commodityUpdate, body).toPromise();
  }

  /**
   * 获取订单列表
   * @param goods  商品
   * @param orderNum  订单编码
   * @param user  用户
   * @param expressNo  物流单号
   * @param source  订单类型 商品来源：0-普通商品、1-二手商品（多个逗号隔开）
   * @param status  订单状态订单状态：0-有效、1-无效、2-待付款、3-待审核、4-审核不通过、5-审核通过、6-排队发货、7-待发货、
   * 8-待收货（已发货）、9-交易完成、10-支付超时、11-客服取消、12-客户取消、13-售后中、14-全部退货、16-交易关闭（多个逗号隔开）
   * @param refundState  售后状态退款状态 0未付款 1已付款 2部分退款 3全部退款（多个逗号隔开）
   * @param orderBeginTime  下单开始时间
   * @param orderEndTime  下单结束时间
   * @param paymentBeginTime  付款开始时间
   * @param paymentEndTime  付款结束时间
   * @param shipBeginTime  发货开始时间
   * @param shipEndTime  发货结束时间
   * @param page 页码
   * @param pageSize 分页大小
   */
  getOrderList(body: any) {
    return this.post(this.serviceUrls.orderList, body).toPromise();
  }

  /**
   * 获取订单详情
   * @param id 订单id
   */
  getOrderDetail(id: any) {
    return this.post(this.serviceUrls.orderDetail, {id}).toPromise();
  }


  /**
   * 获取用户列表
   * page
   * pageSize
   * user  用户
   * beginRegTime  注册开始时间
   * endRegTime  注册结束时间
   */
  userList(body: any) {
    return this.post(this.serviceUrls.userList, body).toPromise();
  }

  // 商品导出
  exportGoodsData(params: any) {
    return this.httpClient.get(this.serviceUrls.exportGoodsUrl, {params, responseType: 'blob'}).toPromise();
  }

  get(url: any, params: any) {
    // @ts-ignore
    return this.httpClient.get(url, {params, headers: {Authorization: JSON.parse(localStorage.getItem('ppypToken').toString()), baseUrl: this.baseUrl}});
  }

  post(url: any, body: any) {
    // @ts-ignore
    return this.httpClient.post(url, body, {headers: {Authorization: JSON.parse(localStorage.getItem('ppypToken').toString()), baseUrl: this.baseUrl}});
  }

  formatTime(date: any, type: 'date' | 'dateTime' | 'time') {
    if (!date || (typeof date) === 'string') {
      return date || '';
    }
    let result = '';
    switch (type) {
      case 'date':
        // @ts-ignore
        result = date.toISOString().match(/\d{4}-\d{2}-\d{2}/)[0];
        break;
      case 'dateTime':
        // @ts-ignore
        result = date.toISOString().match(/\d{4}-\d{2}-\d{2}/)[0] + ' ' + date.toString().match(/\d{2}:\d{2}:\d{2}/)[0];
        break;
      case 'time':
        // @ts-ignore
        result = date.toString().match(/\d{2}:\d{2}:\d{2}/)[0];
        break;
    }
    return result;
  }

}
